package java_1_21.exception;
/**
 * 异常的基本语法
 */

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
class CloseTest implements AutoCloseable{
    @Override
    public void close() throws java.lang.Exception {
        System.out.println("close方法正常执行结束");
    }
}
public class Exception {
    public static void main(String[] args) {
        try( CloseTest closeTest=new CloseTest()){
        }catch(java.lang.Exception e){
        }
//        CloseTest closeTest=new CloseTest();
//        try{
//            closeTest.close();//手工调用close方法
//        }catch(java.lang.Exception e){
//        }
//        //File：java中文件操作类
//        File file=new File("test.t");
//        //输入，不是从键盘输入，而是将文件内容输入到Scanner中
//        Scanner scanner=null;
//        try{
//            scanner=new Scanner(file);
//            System.out.println("文件正确加载完毕");
//        }catch(FileNotFoundException e){
//            System.out.println("文件不存在！");
//            e.printStackTrace();
//        }finally{
//            System.out.println("文件正常处理完毕");
//        }
//        int[] arr={10,20,30};
//        try{
//            System.out.println(arr[10]);
//            System.out.println("异常后的代码快");
//            //此处的e就是异常对象，默认是由JVM产生传递给catch代码段
//        }catch(ArrayIndexOutOfBoundsException e){//捕获相应异常
//            System.out.println("数组越界");
//            //通过对象e调用，printStackTrace()方法叫打印错误堆栈信息--错误开始的位置
//            e.printStackTrace();
//        }finally {
//            //无论上述代码是否产生异常，都会执行
//            System.out.println("finally代码块的代码");
//        }
//        int[] arr={10,20,30};
//        try{
//            arr=null;
//            System.out.println(arr[10]);
//            //此处的e就是异常对象，默认是由JVM产生传递给catch代码段
//        }catch(java.lang.Exception e){//捕获相应异常
//            System.out.println("异常发生了");
//        }
//        System.out.println("异常后的代码");
//        int[] arr={10,20,30};
//        try{
//            arr=null;
//            System.out.println(arr[10]);
//        }catch(ArrayIndexOutOfBoundsException e){//捕获相应异常
//            System.out.println("数组下标越界");
//        }catch(NullPointerException e){
//            System.out.println("空指针异常");
//        }
//        System.out.println("异常后的代码");
        /**
         * 空指针异常
         */
//        String str=null;
//        System.out.println(str.equals("test"));
        /**
         * 除零异常
         */
//        int a=10;
//        int b=0;
//        System.out.println(a/b);
//        System.out.println(testException());
//        try{
//            exceptionChain();
//        }catch(ArrayIndexOutOfBoundsException e){
//            System.out.println("越界异常");
//            e.printStackTrace();
//        }
//        exceptionChain();
    }
    public static void exceptionChain(){
        int[] arr=new int[3];
        //产生越界异常，但是此方法中没有处理，就会将此异常抛出给调用者
        System.out.println(arr[10]);
    }
    public static int testException(){
        try{
            String str=null;
            System.out.println(str.equals("test"));
            return 1;
        }catch(NullPointerException e){
            return 2;
        }finally {
            System.out.println("finally的代码块");
            return 3;
        }
    }
}

